使用 Gemma 打造企业电子邮件 AI 助理

处理客户咨询(包括电子邮件)是 但这样可能很快就会让人应接不暇。我们稍作努力, Gemma 等人工智能 (AI) 模型可以帮助简化这项工作。

每家企业处理电子邮件等咨询的方式略有不同,因此,能够根据企业的需求调整生成式 AI 等技术至关重要。此项目旨在解决提取订单 从电子邮件到面包店的信息再到结构化数据,以便快速 订单处理系统使用 10 到 20 个询问示例, 你可以调整 Gemma 模型,以处理来自你的 帮助您快速应对,并集成您现有的业务系统。 此项目构建了一个 AI 应用模式,您可以对其进行扩展和适应 让 Gemma 模型给您的业务带来价值。

通过视频简要了解项目以及如何扩展项目(包括数据洞见) 请观看这个项目 企业电子邮件 AI 助理 “使用 Google AI 进行构建”视频。您还可以在 Gemma Cookbook 代码库。 否则,您可以使用以下代码开始扩展项目 操作说明。

概览

本教程将介绍如何设置、运营和扩展业务, 使用 Gemma、Python 和 Flask 构建的电子邮件助理应用程序。该项目提供了一个基本的 Web 界面,您可以根据需要对其进行修改。通过 用于将客户电子邮件中的数据提取到一个结构中 一家虚构的面包店。您可以将此应用模式用于任何使用文本输入和文本输出的业务任务。

网页应用界面的屏幕截图

图 1. 用于处理面包店电子邮件咨询的项目界面

硬件要求

在装有图形处理器 (GPU) 或 张量处理单元 (TPU),以及足够的 GPU 或 TPU 内存来容纳 现有模型,以及调参数据。如需在此项目中运行调整配置,您需要大约 16GB 的 GPU 显存、大约相同数量的常规 RAM,以及至少 50GB 的磁盘空间。

您可以使用 Colab 运行本教程的 Gemma 模型调参部分 具有 T4 GPU 运行时的环境。如果您在 Google Cloud 虚拟机实例 按照以下要求配置实例:

  • GPU 硬件:必须使用 NVIDIA T4 才能运行此项目(建议使用 NVIDIA L4 或更高版本)
  • 操作系统:选择 Deep Learning on Linux 选项,具体而言,选择预安装了 GPU 软件驱动程序的 Deep Learning VM with CUDA 12.3 M124
  • 启动磁盘大小:为您的虚拟机预配至少 50GB 的磁盘空间 数据、模型和支持软件。

项目设置

以下说明将逐步引导您准备好此项目以进行开发和测试。常规设置步骤包括安装必备软件 从代码库中克隆项目,设置一些环境 变量、安装 Python 库以及测试 Web 应用。

安装和配置

此项目使用 Python 3 和虚拟环境 (venv) 来管理软件包并运行应用。以下安装说明适用于 Linux 主机。

如需安装所需的软件,请执行以下操作:

  • 安装 Python 3 版和适用于 Python 的 venv 虚拟环境软件包:

    sudo apt update
    sudo apt install git pip python3-venv
    

克隆项目

将项目代码下载到开发计算机。您需要 git 源代码控制软件才能检索项目源代码。

如需下载项目代码,请执行以下操作:

  1. 使用以下命令克隆 git 代码库:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. 您可以选择将本地 Git 代码库配置为使用稀疏检出,以便只获取项目的文件:

    cd gemma-cookbook/
    git sparse-checkout set Demos/business-email-assistant/
    git sparse-checkout init --cone
    

安装 Python 库

激活 venv Python 虚拟环境以管理 Python 软件包和依赖项,然后安装 Python 库。请务必先激活 Python 虚拟环境,然后使用 pip 安装程序安装 Python 库。如需详细了解如何使用 Python 虚拟环境,请参阅 Python venv 文档。

如需安装 Python 库,请执行以下操作:

  1. 在终端窗口中,导航到 business-email-assistant 目录:

    cd Demos/business-email-assistant/
    
  2. 为此项目配置并激活 Python 虚拟环境 (venv):

    python3 -m venv venv
    source venv/bin/activate
    
  3. 使用 setup_python 脚本安装此项目所需的 Python 库:

    ./setup_python.sh
    

设置环境变量

此项目需要设置一些环境变量才能运行,包括 Kaggle 用户名和 Kaggle API 令牌。您必须拥有 Kaggle 账号并请求访问 Gemma 模型,以便下载这些模型。对于此项目,您需要将自己的 Kaggle 用户名和 Kaggle API 令牌添加到两个 .env 文件中,这两个文件分别由 Web 应用和调优程序读取。

如需设置环境变量,请执行以下操作:

  1. 按照说明获取您的 Kaggle 用户名和令牌密钥 (请参阅 Kaggle 文档)。
  2. 请按照 Gemma 设置页面中的获取 Gemma 访问权限说明操作,获取 Gemma 模型的访问权限。
  3. 为项目创建环境变量文件,方法是: .env 文本文件在项目克隆中的每个位置:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. 创建 .env 文本文件后,将以下设置添加到这两个文件中:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

运行和测试应用

完成项目的安装和配置后,运行 Web 应用以确认您已正确配置该应用。在修改项目以供您自己使用之前,您应先执行此操作作为基准检查。

如需运行和测试项目,请执行以下操作:

  1. 在终端窗口中,导航到 email-processing-webapp 目录:

    cd business-email-assistant/email-processing-webapp/
    
  2. 使用 run_app 脚本运行应用:

    ./run_app.sh
    
  3. 在启动 Web 应用之后,程序代码会列出一个网址,其中 您可以浏览和测试通常,此地址为:

    http://127.0.0.1:5000/
    
  4. 在网页界面中,按第一项输入下方的获取数据按钮 字段来生成模型的响应。

在您运行应用后,模型的第一个响应需要更长时间,因为它必须在首次生成时完成初始化步骤。后续提示请求,并在已运行的 Web 应用上生成 在更短的时间内完成

扩展应用

应用运行后,您可以通过修改界面和业务逻辑来扩展应用,使其适用于与您或您的业务相关的任务。您还可以使用 更改应用发送到 生成式 AI 模型。

应用向模型提供指令以及来自用户的输入数据,构成模型的完整提示。您可以修改这些指令来更改模型的行为,例如指定参数的名称和要生成的 JSON 的结构。更改模型行为的更简单方法是为模型的回答提供其他说明或指导,例如指定生成的回复不应包含任何 Markdown 格式。

如需修改提示说明,请执行以下操作:

  1. 在开发项目中,打开 business-email-assistant/email-processing-webapp/app.py 代码文件。
  2. app.py 代码中,向 get_prompt(): 函数添加加法指令:

    def get_prompt():
      return """
        Extract the relevant details of this request and return them in
        JSON code, with no additional markdown formatting:\n"""
    

此示例会在说明中添加“without additional markdown formatting”(无其他 Markdown 格式设置)一词。

提供额外的提示说明可以显著影响生成的输出,并且实现起来所需的工作量要少得多。您应先尝试此方法,看看能否从模型中获得所需的行为。不过,使用提示说明修改 Gemma 模型的行为 限制。特别是模型的总体输入词元限制, 《Gemma 2》有 8,192 个词元,需要你平衡好详细的提示说明 不会超过该上限。

对模型进行调参

建议通过对 Gemma 模型进行微调 更可靠地响应特定任务。特别是,如果您希望模型 生成具有特定结构的 JSON,包括 参数,则应考虑针对该行为微调模型。 根据您希望模型完成的任务,您可以实现 具有 10 到 20 个样本的功能。本教程的这一部分 解释了如何针对特定任务设置和运行 Gemma 模型微调。

以下说明介绍了如何在虚拟机环境中执行微调操作,不过,您也可以使用此项目的关联 Colab 记事本执行此调优操作。

硬件要求

微调的计算要求与 项目其余部分的硬件要求如果您将输入令牌限制为 256 个,并将批处理大小限制为 1,则可以在使用 T4 GPU 运行时的 Colab 环境中运行调优操作。

准备数据

在开始调优 Gemma 模型之前,您必须先准备好调优数据。时间 针对特定任务调优模型时,您需要一组请求, 响应示例。这些示例应显示请求文本(不含任何说明)和预期的响应文本。首先,您应准备一个包含大约 10 个示例的数据集。这些示例应代表各种请求和理想响应。确保请求和 回答不是重复的,因为这会导致模型的响应 重复,且不能根据请求的变化进行适当调整。如果您 调整模型以生成结构化数据格式, 响应严格遵循您想要的数据输出格式。以下 表显示了此代码示例的数据集中的一些示例记录:

请求 响应
Indian Bakery Central,您好!\n您手上有 10 个 penda 和 30 个 bundi ladoo 吗?另外,您还出售香草霜和巧克力味蛋糕吗?我要找的是 6 英寸的 { &quot;type&quot;: &quot;inquiry&quot;, "items": [ { &quot;name&quot;: &quot;pendas&quot;, "quantity": 10 }, { &quot;name&quot;: &quot;bundi ladoos&quot;, "quantity": 30 }, { "name": "蛋糕", &quot;filling&quot;: null, "frosting": "香草", "flavor": "巧克力", "size": "6 英寸"} ] }
我在 Google 地图上看到了贵商家。你们销售 jellabi 和 gulab 吗 Jamun? { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] }

表 1. 面包店电子邮件数据提取器的微调数据集的部分列表。

数据格式和加载

您可以以任何方便的格式(包括数据库记录、JSON 文件、CSV 文件或纯文本文件)存储调整数据,只要您有方法可以使用 Python 代码检索记录即可。此项目会将 data 目录中的 JSON 文件读取到字典对象数组中。在本例中,我们将调参数据集加载到 model-tuning/main.py 模块使用 prepare_tuning_dataset() 函数:

def prepare_tuning_dataset():
    # collect data from JSON files
    prompt_data = read_json_files_to_dicts("./data")
    ...

如前所述,您可以将数据集存储为 只要您可以检索带有关联 并将其组合成文本字符串,用作调参记录。

汇总调优记录

对于实际的调参过程,程序会组建每个请求和响应 单个字符串,其中包含提示说明和 响应。然后,调优程序会对字符串进行标记化处理,以供 模型。您可以在 model-tuning/main.py 模块 prepare_tuning_dataset() 函数中看到用于组装调整记录的代码,如下所示:

def prepare_tuning_dataset():
    ...
    # prepare data for tuning
    tuning_dataset = []
    template = "{instruction}\n{response}"

    for prompt in prompt_data:
        tuning_dataset.append(template.format(instruction=prompt["prompt"],
                                              response=prompt["response"]))

    return tuning_dataset

此函数将数据作为输入,并在指令和响应之间添加换行符以设置格式。

生成模型权重

将调整数据放置并加载到适当位置后,您就可以运行调整程序了。此示例应用的调整过程使用 Keras NLP 训练一个 BERT 模型库, 低排名自适应 (LoRA) 技术 以生成新的模型权重。与全精度调优相比,使用 LoRA 的内存效率显著提高,因为它会近似地估算模型权重的变化。然后,您可以将这些近似权重叠加到现有 来改变模型的行为。

如需执行调优运行并计算新的权重,请执行以下操作:

  1. 在终端窗口中,导航到 model-tuning/ 目录。

    cd business-email-assistant/model-tuning/
    
  2. 使用 tune_model 脚本运行调参过程:

    ./tune_model.sh
    

调整过程需要几分钟,具体取决于您的可用计算 资源。调参程序成功完成后,会写入新的 *.h5 weight 文件放在 model-tuning/weights 目录中,格式如下:

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

问题排查

如果调参未成功完成,可能有两个原因:

  • 内存不足或资源已耗尽:在加载 调参进程请求的内存超过可用 GPU 内存或 CPU 内存。确保您没有在调参时运行 Web 应用 进程正在运行。如果您在具有 16GB GPU 内存的设备上进行调参, 确保将 token_limit 设置为 256,并将 batch_size 设置为 设置为 1
  • 未安装 GPU 驱动程序或与 JAX 不兼容:转换过程要求计算设备安装与 JAX 库版本兼容的硬件驱动程序。有关详情,请参阅 JAX 安装 文档。

部署经调整的模型

调参过程会根据调参数据和 调参应用中设置的周期总数。默认情况下,调优 程序生成 3 个模型权重文件,每个调参周期对应一个。每个后续的调优时代都会生成权重,这些权重可以更准确地再现调优数据的结果。您可以在 调整过程的终端输出,如下所示:

...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848

虽然您希望准确率相对较高(约为 0.80),但不希望准确率过高或非常接近 1.00,因为这意味着权重已接近过拟合调整数据。出现这种情况时, 模型在处理与数据明显不同、 调整示例。默认情况下,部署脚本会选择周期 3 权重,其准确率通常约为 0.80。

如需将生成的权重部署到 Web 应用,请执行以下操作:

  1. 在终端窗口中,导航到 model-tuning 目录:

    cd business-email-assistant/model-tuning/
    
  2. 使用 deploy_weights 脚本运行调参过程:

    ./deploy_weights.sh
    

运行此脚本后,您应该会在 email-processing-webapp/weights/ 目录中看到一个新的 *.h5 文件。

测试新模型

将新的权重部署到应用后,接下来就可以试用新调优的模型了。为此,您可以重新运行 Web 应用并生成响应。

如需运行和测试项目,请执行以下操作:

  1. 在终端窗口中,导航到 email-processing-webapp 目录:

    cd business-email-assistant/email-processing-webapp/
    
  2. 使用 run_app 脚本运行应用:

    ./run_app.sh
    
  3. 启动 Web 应用后,程序代码会列出一个网址,其中 您可以浏览和测试,通常此地址为:

    http://127.0.0.1:5000/
    
  4. 在网页界面中,按第一项输入下方的获取数据按钮 字段来生成模型的响应。

现在,您已在应用中调优并部署了 Gemma 模型!对应用进行实验,并尝试确定经过调优的模型针对您的任务的生成能力限制。如果您发现模型没有 可以考虑将其中一些请求添加到调优示例数据列表中 方法是添加请求并提供理想的响应。然后重新运行调参 重新部署新权重,并测试输出。

其他资源

如需详细了解此项目,请参阅 Gemma Cookbook 代码库。 如果您在构建应用时需要帮助,或者希望与其他开发者合作,请访问 Google 开发者社区 Discord 服务器。如需查看更多“利用 Google AI 构建”项目,请参阅视频播放列表